package ufabc.edu.helppo.gerador;


import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ufabc.edu.helppo.gerador.exceptions.NenhumEspacoDisponivelException;
import ufabc.edu.helppo.persistencia.HibernateUtil;
import ufabc.edu.helppo.persistencia.entidades.EspacoUtilizado;

public class ConsultaEspacoDisponivel {

	public EspacoUtilizado proximo() throws NenhumEspacoDisponivelException {

		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = session.beginTransaction();
		
		String hql = "select max(id) from EspacoUtilizado";
		Query query = session.createQuery(hql);
		
		Integer id = (Integer)query.uniqueResult();
		EspacoUtilizado proximo = new EspacoUtilizado();
		if (id == null){
			proximo.setListen_port(9100);
			proximo.setRegion_x(9500);
			proximo.setRegion_y(9495);
		}else{
			
			EspacoUtilizado ultimo = (EspacoUtilizado)session.get(EspacoUtilizado.class, id);
			proximo.setListen_port(ultimo.getListen_port()+1);
			
			int region_x = ultimo.getRegion_x(); 
			int region_y = ultimo.getRegion_y();
			if (region_x >= 9520){
				region_x = 9500;
				region_y++;
			}
			else{
				region_x++;
			}
			proximo.setRegion_x(region_x);
			proximo.setRegion_y(region_y);
		}
		session.persist(proximo);
		
		tx.commit();
		session.close();

		if (proximo == null)
			throw new NenhumEspacoDisponivelException();
		else
			return proximo;
	}
	
}
